#ifndef DESIGN_FACADE_H_
#define DESIGN_FACADE_H_

namespace facade{

class PopcornPopper
{
public:
    void On();
    void Off();
    void Pop();
};

class TheaterLights
{
public:
    void Dim();
    void On();
};

class Screen
{
public:
    void Down();
    void Up();
};

class Projector
{
public:
    void On();
    void Off();
    void WideScreenMode();
};

class Amplifier
{
public:
    void On();
    void Off();
    void SetDvd();
    void SetSurroundSound();
    void SetVolume();
};

class DvdPlayer
{
public:
    void On();
    void Play();
    void Stop();
    void Eject();
    void Off();
};

class HomeTheaterFacade
{
public:
    HomeTheaterFacade(Amplifier* a, DvdPlayer* d,
                      Projector* p, TheaterLights* l,
                      Screen* s, PopcornPopper* po);
public:
    void WatchMovie();
    void EndMovie();
private:
    Amplifier* m_amp;
    DvdPlayer* m_dvd;
    Projector* m_projector;
    TheaterLights* m_light;
    Screen* m_screen;
    PopcornPopper* m_popper;
};
}
#endif // DESIGN_FACADE_H_
